/*
	Exemplos para compreendimento da função: socket
	Não tem o foco de compilação
*/

//	cabeçalhos:
#include <sys/types.h>
#include <sys/socket.h>



//	protótipo:
int socket(int domain, int type, int protocol); 
                
//	explicação :
/*	
	[Será usado tanto no cliente como no servidor]
	Abre um socket e retorna o seu File Descriptor.
	domain:		PF_INET para IPv4 (AF_INET tbm funciona, mas deve-se usar PF, por boas práticas) (P é de protocol, A é de Address)
				Pode-se usar o campo ai_family da estrutura sockaddr
	type:		SOCK_STREAM para TCP
	protocol:	preencher com 0 para que o SO escolha de acordo com o tipo passado.
*/

//	exemplos:

// exemplo 1: usando o retorno de getaddrinfo() para abrir o socket
int sockfd;
struct addrinfo hints, *res;

// faz o lookup [com hints já preenchido, ou NULL no lugar]
if( getaddrinfo("www.example.com", "http", &hints, &res) != 0 ) {
	// tratamento de erro
	fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
}

// abre o socket
if( sockfd = socket(res->ai_family, res->ai_socktype, res->ai_p'rotocol == -1) ) {
	// tratamento de erro
	fprintf(stderr, "erro ao abrir o socket!");
}

// do stuffs with the descriptor and then...

// close the socket
// retorna 0 em caso de sucesso
close(sockfd);


// [again, you should do error-checking on getaddrinfo(), and walk
// the "res" linked list looking for valid entries instead of just
// assuming the first one is good (like many of these examples do.)
// See the section on client/server for real examples.]








